﻿using DAO;
using DTO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace BUS
{
    public class Q_BUSChiTietKhamBenh
    {
        /// <summary>
        /// Báo cáo phí khám bệnh đã thu
        /// </summary>
        /// <param name="ngay">Ngày cần xuất báo cáo</param>
        /// <returns></returns>
        public List<PhiTheoNgay> dsPhiKhamBenhTheoNgay(DateTime ngay)
        {
            try
            {
                Q_DAOChiTietKhamBenh DAOctkb = new Q_DAOChiTietKhamBenh();
                return DAOctkb.dsPhiKhamBenhTheoNgay(ngay);
            }
            catch(Exception)
            {
                throw new Exception("E_CTKB_001: Không lấy được danh sách phí khám bệnh theo ngày.");
            }
        }

        /// <summary>
        /// Thống kê phí khám bệnh theo tháng
        /// </summary>
        /// <param name="Thang">Tháng thống kê</param>
        /// <param name="Nam">Năm năm thống kê</param>
        /// <returns></returns>
        public List<ChiTheoThang> dsPhiKhamBenhTheoThang(int Thang, int Nam)
        {
            try
            {
                Q_DAOChiTietKhamBenh DAOctkb = new Q_DAOChiTietKhamBenh();
                return DAOctkb.dsPhiKhamBenhTheoThang(Thang, Nam);
            }
            catch (Exception)
            {
                throw new Exception("E_CTKB_002: Không lấy được danh sách phí khám bệnh theo tháng.");
            }
        }
        /// <summary>
        /// Kiểm tra tháng chi có tồn tại trong csdl
        /// </summary>
        /// <param name="ds">Danh sách chi của năm</param>
        /// <param name="Thang">Tháng kiểm tra</param>
        /// <returns></returns>
        private bool KiemTraPhiThangTonTai(int Thang, List<ChiTheoNam> ds)
        {
            for (int i = 0; i < ds.Count; i++)
            {
                if (Thang == ds[i].Thang)
                {
                    return true;
                }
            }
            return false;
        }
        /// <summary>
        /// Thống kê phí khám bệnh theo năm
        /// </summary>
        /// <param name="Nam">Năm năm thống kê</param>
        /// <returns></returns>
        public List<ChiTheoNam> dsPhiKhamBenhTheoNam(int Nam)
        {
            try
            {
                List<ChiTheoNam> dsChiNam = null, dsResult = null;
                Q_DAOChiTietKhamBenh DAOphi = new Q_DAOChiTietKhamBenh();
                dsResult = DAOphi.dsPhiKhamBenhTheoNam(Nam);
                dsChiNam = new List<ChiTheoNam>();
                int index = 0;
                for (int i = 1; i <= 12; i++)
                {
                    if (KiemTraPhiThangTonTai(i, dsResult))
                    {
                        dsChiNam.Add(new ChiTheoNam() { Thang = i, TongTien = dsResult[index].TongTien });
                        index++;
                    }
                    else dsChiNam.Add(new ChiTheoNam() { Thang = i, TongTien = 0 });
                }
                return dsChiNam;
            }
            catch (Exception)
            {
                throw new Exception("E_CTKB_003: Không lấy được danh sách phí khám bệnh theo năm.");
            }
        }
    }
}
